package com.zy.ems.common.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.collections.KeyValue;
import org.apache.commons.collections.keyvalue.DefaultKeyValue;

/**
 * MD5工具类。
 * 
 * @author Luffy
 *
 */
public class Md5Util {

	/**
	 * Calculates the MD5 digest and returns the value as a 32 character hex
	 * string.
	 * 
	 * @param data
	 * @return
	 */
	public static String getMd5Hex(String data) {
		return DigestUtils.md5Hex(StringUtils.defaultString(data));
	}

	/**
	 * 按规则生成密码的MD5码。
	 * 
	 * @param password
	 * @param salt
	 * @return
	 */
	public static String getPasswordMd5(String password, String salt) {
		String pwd = StringUtils.defaultString(password);
		String slt = StringUtils.defaultString(salt);
		// MD5(原始密码的MD5 + salt)
		return DigestUtils.md5Hex(DigestUtils.md5Hex(pwd).concat(slt));
	}

	/**
	 * 返回原始密码经过加盐后加密过的key-value，key为密码的密文，value为salt.
	 * 
	 * @param password
	 */
	public static KeyValue getPasswordMd5(String password) {
		String uniqueStr = UniqueStringGenerator.getUniqueString();
		String salt = uniqueStr.substring(uniqueStr.length() - 6);
		String ret = getPasswordMd5(password, salt);
		return new DefaultKeyValue(ret, salt);
	}

	// 手机号码验证
	public static boolean isMobileNumber(String mobiles) {
		// Pattern p =
		// Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0-9]))\\d{8}$");
		Pattern p = Pattern.compile("^((13[0-9])|(14[5,7])|(15[^4,\\D])|(17[0-9])|(18[0-9]))\\d{8}$");
		Matcher m = p.matcher(mobiles);
		return m.matches();
	}
}
